######################################## 文件 IO ######################################## 检查文件权限 **************************************** .. code-block:: go const ( PermR = (4) PermW = (2) PermX = (1) ) if info, err := os.Stat("/proc/1/cmdline"); err == nil { log.Println(info.Mode()) if info.Mode()&PermR == 0 { log.Fatalln("没有对 /proc/1/cmdline 的读权限") } } else { log.Fatalln(err) } 监控文件变化 **************************************** Linux 提供了 inotify 来监控文件系统的变化,有些库对其的包装,这些库有: - http://github.com/silenceper/gowatch - https://github.com/fsnotify/fsnotify .. code-block:: go func watch(p string, event chan<- EventItem) { watcher, err := inotify.NewWatcher() if err != nil { log.Fatal(err) } dir := path.Dir(p) err = watcher.Watch(dir) if err != nil { log.Fatal(err) } register(p) go func() { defer watcher.Close() for { select { case ev := <-watcher.Event: if ev.Mask&(inotify.IN_CLOSE_WRITE) > 0 && p == ev.Name { event <- diff(p) } case err := <-watcher.Error: log.Println("error:", err) } } }() } .. important:: inotify 无法监视 /proc 这种目录 .. seealso:: - `Golang inotify.NewWatcher函数代码示例 `_ - `Go 文件监控怎么实现? `_ - `linux实时文件事件监听--inotify `_ - `浅析gowatch监听文件变动实现原理 - 知乎 `_